#include <iostream>

class Test
{
public:
    Test()
    {
        std::cout<<"构造函数\n";
    }
    ~Test()
    {
        std::cout<<"析构函数\n";
    }

};

class Derivend:public Test
{

};

void func()
{
    //Test t;  //栈的解旋：函数栈上的临时对象会在抛出异常前全部释放
    throw Derivend();
    //throw Test();
}

int main()
{
    try
    {
        func();
    }
    //支持向上转型
    //当多个赋值都能捕获时，按顺序捕获
    catch(const Test& t)  //捕获对象会在catch之后析构
    {
        std::cout<<"Test\n";
    }
    catch(const Derivend &t)
    {
        std::cout<<"Derivend\n";
    }
    
    return 0;
}